GVKun编程网logo

无法使用带有Java的Selenium WebDriver打开IE11驱动程序实例(无法使用javac)

6

在这篇文章中,我们将为您详细介绍无法使用带有Java的SeleniumWebDriver打开IE11驱动程序实例的内容,并且讨论关于无法使用javac的相关问题。此外,我们还会涉及一些关于IE上的Ja

在这篇文章中,我们将为您详细介绍无法使用带有Java的Selenium WebDriver打开IE11驱动程序实例的内容,并且讨论关于无法使用javac的相关问题。此外,我们还会涉及一些关于IE上的Java中无法使用Selenium WebDriver获取新的窗口句柄、javascript – 无法使用Selenium Webdriver中的send_keys上传文件、JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?的知识,以帮助您更全面地了解这个主题。

本文目录一览:

无法使用带有Java的Selenium WebDriver打开IE11驱动程序实例(无法使用javac)

无法使用带有Java的Selenium WebDriver打开IE11驱动程序实例(无法使用javac)

    System.setProperty("webdriver.ie.driver","C:\\Users\\IEDriverServer_Win32_2.45.0\\IEDriverServer.exe");    WebDriver driver = new InternetExplorerDriver();    driver.get("http://xxx");

执行上述代码时显示错误:

线程“主”中的异常org.openqa.selenium.remote.SessionNotFoundException:启动Internet
Explorer发生意外错误。所有区域的保护模式设置都不相同。对于所有区域,“启用保护模式”必须设置为相同的值(启用或禁用)。(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:1.33秒

有人可以建议解决此问题吗?

答案1

小编典典

如果u在没有访问权限的情况下位于代理后面,则无法更改保护模式设置,请使用此功能

DesiredCapabilities cap = DesiredCapabilities.internetExplorer();        cap.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);

这会带来一些脆弱感

IE上的Java中无法使用Selenium WebDriver获取新的窗口句柄

IE上的Java中无法使用Selenium WebDriver获取新的窗口句柄

如何解决IE上的Java中无法使用Selenium WebDriver获取新的窗口句柄?

您需要做两件事:

  1. 在IE浏览器中更改安全设置:

打开IE浏览器,单击“ Internet选项” =>“安全” =>选中“启用保护模式”,以表示“ Internet”,“本地Intranet”,“受信任的站点”和“受限制的站点”。

这使IE驱动程序能够控制新窗口的句柄,以便在调用driver.getwindowHandles();driver.getwindowHandles().size(); 时将获得所有句柄,包括原始窗口和新窗口。为了更加准确,您只需要将所有4个域的安全设置都设置为相同即可,这意味着您可以取消选中所有4个域的“启用保护模式”,但是显然不建议这样做。

  1. 调用之后driver.switchTo().window(windowName);,需要添加((JavascriptExecutor) driver).executeScript("window.focus();");IE驱动程序才能在窗口上执行任何操作。

这是因为IE驱动程序需要它正在处理的窗口在前台,因此此行可帮助驱动程序获得窗口的焦点,以便它可以对所需的窗口执行任何操作。

以下是一个完整的示例:

@H_301_26@ String baseWin = driver.getwindowHandle(); //Some methods to open new window, e.g. driver.findElementBy("home-button").click(); //loop through all open windows to find out the new window for(String winHandle : driver.getwindowHandles()){ if(!winHandle.equals(baseWin)){ driver.switchTo().window(winHandle); //your actions with the new window, e.g. String newURL = driver.getcurrenturl(); } } //switch back to the main window after your actions with the new window driver.close(); driver.switchTo().window(baseWin); //let the driver focus on the base window again to continue your testing ((JavascriptExecutor) driver).executeScript("window.focus();");

解决方法

当我单击页面上的按钮(在IE浏览器中)时,将打开一个新的弹出页面。我尝试获取此弹出窗口的窗口句柄失败。这是我的第一次尝试:

String baseWin = driver.getWindowHandle();
System.out.println(baseWin);
Set<String>s = driver.getWindowHandles();
Iterator<String> ite = s.iterator();
while ( ite.hasNext() ) {
    String popUpHandle = ite.next();
    if(!baseWin.equals(popUpHandle)) {
        driver.switchTo().window(popUpHandle);
        System.out.println(driver.switchTo().window(popUpHandle).getTitle());

此尝试仅打印基本窗口的句柄,并且如果第二个print语句放置在if()语句之外,但在while()语句内以及if()语句之后,则仅输出基本窗口的标题。因此,这组句柄似乎只包含基本窗口句柄。

这是我的第二次尝试:

String baseWin = driver.getWindowHandle();
System.out.println(baseWin);
ArrayList<String> popUpWin = new ArrayList<String>(driver.getWindowHandles());
popUpWin.remove(baseWin);
driver.switchTo().window(popUpWin.get(0));
System.out.println(driver.switchTo().window(popUpWin.get(0)));

尝试返回一个错误,该错误表明数组popUpWin为空,即size
==0。因此,当我调用driver.getWindowHandles()时,不会检索弹出窗口的句柄,而仅包含基本窗口的句柄。这是IE问题吗?有解决方法吗?还是我忽略了代码中的某些内容?(请注意,我忽略了此处包含的代码中的暂停,所以我不认为这是问题所在。)

javascript – 无法使用Selenium Webdriver中的send_keys上传文件

javascript – 无法使用Selenium Webdriver中的send_keys上传文件

我在使用Selenium Webdriver和 Python进行文件上传时遇到了麻烦.我昨天重新安装了selenium和python,所以我很确定一切都是最新的,如果有帮助的话我会使用Windows 7.我知道其他人已经问过这个问题,而且每个人都建议的答案是在文件上传元素上使用send_keys命令.
我已尝试在其他网页上进行文件上传,我让它至少在另一个页面上工作,但是当我尝试在页面上尝试相同的程序时,似乎没有任何事情发生.我想我记得找到其他人无法让这个工作的例子,所以我不认为我是唯一一个有这个问题的人.

可能相关的一件事是,当我在文件上传表单上尝试send_keys时,selenium抛出一个错误,说该元素不可见,因此无法与之交互(实际上,它是可见的,但显然不是在硒的眼睛里).我通过事先运行这行JavaScript修复了这个问题:

document.getElementById('UploadDocumentPopup').style.display = 'block';@H_301_13@ 
 

(UploadDocumentPopup)是文件输入部分的父元素)

另一个可能有用的消息是,当我使用Selenium 1 / Selenium RC时,我成功地使用了attach_file命令(但是仅支持Firefox).

如果它有帮助,这里是如何进入我正在使用的页面.点击此链接:https://qa.infosnap.com/family6/gosnap.aspx?action=3345&culture=en,点击“继续工作”,然后使用电子邮件aaaa@b.com和密码“asdfjkl;”(不带引号)登录.然后单击“继续工作”链接之一.您访问的页面应包含文档上传和照片上传部分.如果没有,只需使用“prev”和“next”来浏览并找到所做的页面(只有3页).这是相关的代码 – 我也尝试了很多其他的东西,如果它有用,我很乐意分享,如果我能记住它们,但这就是我认为“应该”工作的方式.如果您准备好了,请随意检查页面源,但是FYI’documentfile’是页面源中输入type =’file’元素的名称,最后一行中的xpath指向“upload” “按钮.

js = "document.getElementById('UploadDocumentPopup').style.display = 'block';"
wd.execute_script(js)
wd.find_element_by_link_text("Upload Document...").click()
wd.find_element_by_id("documentfile").send_keys("C:\\Users\\username\\testdoc.rtf")
#ActionChains(wd).send_keys(Keys.ESCAPE)
wd.find_element_by_xpath("//div[@id='modal_container']/div/form/div/input[1]").click()@H_301_13@ 
 

更新:我意识到我没有尝试过除了Firefox以外的任何东西,所以我尝试了IE11 – 发生的事情是,当调用send_keys时,本机操作系统文件上传框出现了(我觉得很奇怪,因为我没有单击“浏览”按钮 – 仅使用send_keys),并将文本输入文件名字段.然后文件上传对话消失了,但好像什么也没发生过.回顾:在Internet Explorer中,文件上传对话框打开,文件路径进入此对话框,对话框消失,但没有实际附加文件.在Firefox中,没有对话框打开,仍然没有附加文件. Chrome与Firefox相同.

编辑:这是文档上传部分的HTML代码:

<div id="UploadDocumentPopup"https://www.jb51.cc/tag/dis/" target="_blank">display:none;">
    <div>
        <h1https://www.jb51.cc/tag/ott/" target="_blank">ottom:10px; border-bottom:1px solid #CCCCCC;">
            Upload Document
        </h1>
        <p>
            Choose a file to upload.
        </p>
        <form id="documentuploadform" action="services/documentservice.aspx" enctype="multipart/form-data" method="post"
            onsubmit="return aim.submit(this,{'onStart' : startUploadDocument,'onComplete' : completeUploadDocument})">
            <input type="file" size="50" id="documentfile" name="documentfile" />
            <input type="hidden" name="cmd" value="upload" />
            <input type="hidden" id="documentuploadfield" name="field" />
            <div>
                <input name="ctl00$OutsideFormContentPlaceholder$ctl06" type="submit" value="Upload" />
                <input name="ctl00$OutsideFormContentPlaceholder$ctl07" type="button" onclick="Control.Modal.close();" value="Cancel" />
            </div>
        </form>
    </div>
</div>@H_301_13@ 
 

我还要提一下,我正在寻找一个完全基于selenium的解决方案 – 我知道AutoIt和类似的工具,但我需要远程运行它.

解决方法

我必须看到整个脚本以确保代码是正确的,但这应该给你一些工作:

wd.find_element_by_css_selector('a[onclick*="uploadDocument"]').click()
wd.find_element_by_css_selector('div#UploadDocumentPopup input#documentfile').send_keys(os.getcwd()+"/<filename>")
wd.find_element_by_css_selector('div#UploadDocumentPopup input[value="Upload"]').click()@H_301_13@ 
 

你应该在哪里替换< filename>使用您尝试上传的文件的确切名称.这个版本使用os.getcwd()来获取testscript的当前工作目录,然后将文件名附加到该工作目录的末尾,创建一个可在任何机器上工作的通用路径,而不是指定一个将中断的绝对路径下一台机器.使用此代码不再需要Javascript代码段.

我使用CSS选择器,因为我更喜欢它们而不是xpaths,如果你愿意,你应该能够轻松地转换它们. (如果你真的不能,请发表评论,我会去吧)

JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测

JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测

我正在尝试使用selenium和铬在网站中自动化一个非常基本的任务,但是以某种方式网站会检测到铬是由selenium驱动的,并阻止每个请求。我怀疑该网站是否依赖像这样的公开DOM变量https://stackoverflow.com/a/41904453/648236来检测selenium驱动的浏览器。

我的问题是,有没有办法使navigator.webdriver标志为假?我愿意尝试修改后重新尝试编译selenium源,但是似乎无法在存储库中的任何地方找到NavigatorAutomationInformation源https://github.com/SeleniumHQ/selenium

任何帮助深表感谢

PS:我还从https://w3c.github.io/webdriver/#interface尝试了以下操作

Object.defineProperty(navigator, ''webdriver'', {    get: () => false,  });

但是它仅在初始页面加载后更新属性。我认为网站会在执行脚本之前检测到变量。

答案1

小编典典

从当前的实现开始,一种理想的访问网页而不被检测到的方法是使用ChromeOptions()该类向以下参数添加几个参数:

排除enable-automation开关的集合
关掉 useAutomationExtension
通过以下实例ChromeOptions

Java示例:

System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");ChromeOptions options = new ChromeOptions();options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));options.setExperimentalOption("useAutomationExtension", false);WebDriver driver =  new ChromeDriver(options);driver.get("https://www.google.com/");

Python范例

from selenium import webdriveroptions = webdriver.ChromeOptions()options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option(''useAutomationExtension'', False)driver = webdriver.Chrome(options=options, executable_path=r''C:\path\to\chromedriver.exe'')driver.get("https://www.google.com/")

node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?

node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?

我们的团队正计划开发一个框架来自动化手动测试用例.但我们仍然坚持在 javascript和java之间进行选择.通过一些搜索,我们发现Webdriverjs是javascript的selenium绑定.现在,主要障碍是我们是否应该使用selenium-webdrier来使用webdriverjs或java的javascript?

我们已经使用selenium-webdriver了解java,但是当我们开始使用新框架时,我们只想打开简单,快速和可靠的选项.

请建议javascript与webdriverjs(我们需要学习javascript)或java与selenium-webdriver?

解决方法

我们遇到了您现在看到的同样挑战.
Java堆栈上有很多selenium工程师,但在Node.js和selenium-webdriver堆栈上并不多.

大多数较新的现代测试框架都是在Node.js中完成的,因为前端和后端都是使用NodeJS完成的,并将继续这种趋势.我要问的问题是开发团队是使用Java(例如Tomcat)还是使用Node.js来开发他们的产品.如果他们使用的是Node.js,那么将测试框架用同一种语言编写也是理想的.

这是为了方便

>开发和自动化团队,定位器等之间的协作.
>减轻开发人员编写硒测试的摩擦

marcel Erz在我们的South Bay Selenium聚会上对此进行了非常好的介绍.我强烈建议您在做出决定之前先仔细阅读.

Java与JavaScript(用于UI测试)

>前端工程师编写的大多数测试
>不熟悉Java及其生态系统
>上下文切换
>不太可能接受测试

http://www.marcelerz.com/blog/talk-nodejs-based-selenium-testing-south-bay-selenium-meetup

现在,如果您开始使用Javascript,那么主要的挑战当然是异步.大多数自动化工程师习惯于使用Python和Java同步模式.需要一些时间来习惯javascript的异步行为.但最终结果是值得的.

我们的框架主要用Node.js编写,我们使用Mocha作为我们的线束和测试运行器.推荐的断言库是Chai,但如果您需要特殊需求,可以使用其他库.

我们选择的selenium库是nd上的WebDriverJs(区分大小写)又名selenium-webdriver,它是官方的JavaScript端口.我们使用selenium-webdriver的主要原因之一是代码可读性以及实现类似同步语法的能力,以便让Java测试工程师牢记.这可以通过利用内置的Promise Manager控制流和Mocha Test Wrapper来实现,它可以自动处理对promise管理器的所有调用,使代码非常同步.

https://code.google.com/p/selenium/wiki/WebDriverJs#Writing_Tests

然后,这是一个添加自己的框架和构建页面对象的问题. Javascript中的页面对象是一个全新的野兽,您必须很好地掌握原型以及如何模拟Java的继承.

您还应该在npm中使用selenium-standalone作为本地和远程执行的唯一通信点,而不是在测试中创建驱动程序实例(本地/远程).这样,框架具有相同的接口并使事情保持一致.您不希望跟踪多个本地驱动程序可执行文件并更新它们.一个包装可以处理所有事情.

如果您已经阅读过这里,并且您非常确定您将使用Node.js路由而不是Java.下面是我们框架的一个非常简化的版本,可以帮助您入门.它具有上面描述的所有实现.欢迎任何拉动请求!

https://github.com/mekdev/mocha-selenium-pageobject

我们今天的关于无法使用带有Java的Selenium WebDriver打开IE11驱动程序实例无法使用javac的分享就到这里,谢谢您的阅读,如果想了解更多关于IE上的Java中无法使用Selenium WebDriver获取新的窗口句柄、javascript – 无法使用Selenium Webdriver中的send_keys上传文件、JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?的相关信息,可以在本站进行搜索。

本文标签: