问题标签 [expected-condition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
919 浏览

java - 如何最好地使用 ExpectedConditions.or 与可变数量的条件

我一直在使用 ExpectedConditions.or 。例如,查找一个或另一个元素是否存在是非常有用的。我现在想做的是使用可变参数构建一个更灵活的方法。

看看我在下面做了什么。它可以工作......就像它一样,但我想要一个更优雅的解决方案,它实际上可以与任意数量的元素一起工作。

0 投票
0 回答
240 浏览

c# - 发生硒超时时如何返回内部异常?

我目前有一个使用 Selenium WebDriver 和 .NET Framework 的解决方案,使用以下代码创建与 Web 元素交互的等待,作为我们自动化解决方案的一部分。

wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(60));

这适用于等待元素加载到屏幕中,但它不包含最有用的消息,例如,如果元素不可点击,则返回以下内容:

Message: OpenQA.Selenium.WebDriverTimeoutException : Timed out after 60 seconds

而不是 NoSuchElement 异常,它标识要输入的记录。

当尝试验证记录值时,这将成为一个更大的问题,例如 wait.Until(webdriver => element.GetAttribute("value") == expectedValue);

因为这会返回超时问题,而不是实际声明差异是什么,例如 Nunit Assert 会给你,我在这里用以下方法解决这个问题

有没有更好的方法可以用内部错误的原始消息覆盖默认超时响应,例如在尝试查找元素 x 秒后返回 NoSuchElement 异常,而不是 TimeoutException。

谢谢

0 投票
2 回答
606 浏览

java - Slenium-Java:Wait.until(ExpectedConditions.invisibilityOfElementLocated()) 对于负面情况总是失败

ExpectedConditions.invisibilityOfElementLocated throws Timeout Exception并终止程序。

  1. 启动浏览器并导航到登录页面。

  2. 输入用户名、密码,点击登录

  3. 由于加载需要不同的时间,我想等到登录按钮不可见

这适用于我使用有效凭据并单击登录的积极情况。但对于负面情况,它总是失败,即当我在登录时尝试使用无效的用户名和密码组合 clcik 时,它正在等待最长时间,然后因超时异常而失败。最后我尝试使用一个Try / Catch经过验证的标题,但真的不明白为什么它不能在负面情况下工作,尽管等待条件是登录页面并且我正在使用不可见的元素......

预期:输入用户名和密码后,一旦我点击登录 - 它应该退出等待并获取驱动程序页面标题实际:它正在等待给出的最大时间错误超时异常,终止程序执行

日志:

2019 年 8 月 21 日下午 5:38:37 org.openqa.selenium.remote.ProtocolHandshake createSession INFO:检测到方言:线程“主”org.openqa.selenium.TimeoutException 中的 W3C 异常:预期条件失败:等待元素不再可见:By.name:登录(尝试 60 秒,间隔 500 毫秒)构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:17:03 '系统信息:主机:'LAPTOP-2PL6I9SD',ip:'192.168.43.30',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0',java.version:' 11.0.1' 驱动程序信息:org.openqa.selenium.firefox.FirefoxDriver Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 67.0.3, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID:20190618025334, moz:geckodriverVersion: 0.24.0, moz:headless: false, moz:processID: 15188, moz:profile: C:\Users\SWATHI\AppData\Loc..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000 },unhandledPromptBehavior:dismiss and notify} 会话 ID:在 org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95) 在 org.openqa.selenium.support 上的 e2401e63-ffda-45cd-a73f-ea418e38236d。 ui.FluentWait.until(FluentWait.java:272) 在 basic_tests.LoginFlightTest.main(LoginFlightTest.java:33)假,moz:processID:15188,moz:profile:C:\Users\SWATHI\AppData\Loc ...,moz:shutdownTimeout:60000,moz:useNonSpecCompliantPointerOrigin:假,moz:webdriverClick:true,pageLoadStrategy:正常,平台: WINDOWS,platformName:WINDOWS,platformVersion:10.0,rotatable:false,setWindowRect:true,strictFileInteractability:false,超时:{implicit:0,pageLoad:300000,脚本:30000},unhandledPromptBehavior:dismiss and notify}会话ID:e2401e63-ffda -45cd-a73f-ea418e38236d at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272) at basic_tests .LoginFlightTest.main(LoginFlightTest.java:33)假,moz:processID:15188,moz:profile:C:\Users\SWATHI\AppData\Loc ...,moz:shutdownTimeout:60000,moz:useNonSpecCompliantPointerOrigin:假,moz:webdriverClick:true,pageLoadStrategy:正常,平台: WINDOWS,platformName:WINDOWS,platformVersion:10.0,rotatable:false,setWindowRect:true,strictFileInteractability:false,超时:{implicit:0,pageLoad:300000,脚本:30000},unhandledPromptBehavior:dismiss and notify}会话ID:e2401e63-ffda -45cd-a73f-ea418e38236d at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272) at basic_tests .LoginFlightTest.main(LoginFlightTest.java:33)useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script :30000},unhandledPromptBehavior:dismiss and notify} 会话 ID:在 org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95) 在 org.openqa.selenium 的 e2401e63-ffda-45cd-a73f-ea418e38236d。 support.ui.FluentWait.until(FluentWait.java:272) 在 basic_tests.LoginFlightTest.main(LoginFlightTest.java:33)useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script :30000},unhandledPromptBehavior:dismiss and notify} 会话 ID:在 org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95) 在 org.openqa.selenium 的 e2401e63-ffda-45cd-a73f-ea418e38236d。 support.ui.FluentWait.until(FluentWait.java:272) 在 basic_tests.LoginFlightTest.main(LoginFlightTest.java:33){implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior:dismiss and notify} 会话 ID:e2401e63-ffda-45cd-a73f-ea418e38236d 在 org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java :95) 在 org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272) 在 basic_tests.LoginFlightTest.main(LoginFlightTest.java:33){implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior:dismiss and notify} 会话 ID:e2401e63-ffda-45cd-a73f-ea418e38236d 在 org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java :95) 在 org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272) 在 basic_tests.LoginFlightTest.main(LoginFlightTest.java:33)

0 投票
0 回答
200 浏览

java - 如何使用 selenium webdriver 在同一选项卡中访问新打开的页面

在同一选项卡(不在新选项卡中)提交表单后,我无法访问新打开的页面。我是硒驱动程序的新手,请帮助我。

事实上,我访问了第一页并成功填写了表格,然后我单击了提交按钮并继续到下一页,在同一选项卡中打开。但是后来我无法访问那个新打开的页面。

我还使用 10 秒显式等待来管理表单提交和新页面打开时间,但不起作用。我没有使用 WindowHandles() 因为我不习惯使用它。Windowhandles() 会起作用吗?

单击提交按钮后,只有一种方法可以通过单独使用 navigate().to() 方法访问新页面。但是,这是控制新页面而不是通过其他方式自动控制新页面的好方法吗?

我使用了以下显式等待,然后在新页面上访问了一个按钮,但不起作用:

不使用显式等待我得到以下错误:

没有这样的元素:无法找到元素

使用显式等待后,出现以下错误:

预期条件失败:等待 By.id 定位的元素的可见性:BTNCustomQuestionFinalStep(尝试 10 秒,间隔 500 毫秒)

0 投票
3 回答
145 浏览

c - 如何修复“错误:预期;,或)之前”字符串参数

我们正在尝试在 c 中为我们的项目实现一个 bash shell。现在我正在创建一个函数 addAlias,它基于我们的 AddToken 函数(填充我们的 strArray 结构)。

strArray 结构有一个 **char (字符串数组)和 int 用于数组中的标记数。同样, aliasArray 结构有两个 **char 和一个 int 用于别名的数量。实现几乎相同,所以我不明白 addAlias 函数中的错误来自哪里。

我已经尝试搜索堆栈,并移动代码,但我不知道是什么原因造成的。

这是来自头文件:

这是来自 c 文件的函数,它应该分别使用参数给出的快捷方式及其别名填充两个数组:

}

这些是我们主函数的声明: aliasArray 别名;

这是我为此部分添加的所有代码,当我尝试将其注释掉并使用 gcc -g 运行所有内容时,我收到了一些不相关的警告,但一切运行正常。当它没有被注释掉并且我尝试运行它时,我得到了这些错误:

0 投票
3 回答
1133 浏览

selenium - 通过 WebDriverManager 使用 Selenium 在 ExpectedConditions 中的 java.lang.NullPointerException

以下行给出错误:

代码如下:

另外,我观察到:

工作正常。

如何处理?

堆栈跟踪:

0 投票
2 回答
123 浏览

python - Selenium window_handles 不适用于 javascript 按钮

我正在做一个硒项目。我需要单击 javascript 按钮并将我的新 url 保存在 selenium window_handles 中。我的代码如下

但我收到以下错误:

0 投票
1 回答
71 浏览

c# - 如何检查点击是否确实做了任何事情,或替代解决方案

我正在使用 NUnit 在 Selenium 中创建一些测试。我有一些点击没有通过的问题,因为按钮没有正确加载。我确实有一个等待,应该等到按钮可点击,但它们似乎在实际可点击之前是可点击的,并且点击失败。在我单击之前,我可以看到该元素确实具有正确的 href 链接,但没有任何反应。

单击之前的静态延迟确实“修复”了它,但它是一个糟糕的解决方案,它减慢了整个测试过程并且经常在压力测试期间中断。

我很确定这是页面上的 javascript 很慢并且在点击之前没有正确初始化。

我想而不是检查它是否可点击,而是检查点击是否做了任何事情。我想在点击之前和之后匹配页面源,但并非所有点击都一定会改变 html,因此只是破坏了其他测试。

这是我目前的点击方法。不过,等待似乎毫无用处。

经常失败的测试是我打开页面并在检查显示某些元素后单击一个按钮。

0 投票
2 回答
141 浏览

python - 如何在遍历 URL 时使用 Selenium Python 查找 Web 元素

我需要从一百万个网页中循环并刮取一个元素(所有页面的类名相同)。我以以下(简化)方式设置了代码:

代码运行得相当顺利,当我中断内核进行检查时,我注意到每次迭代都在i增加url。但是,驱动程序网页“卡”在第一个 URL 上,即http://www.cnappc.it/risultato.aspx?IDAssociato=0&tipo=1#edit,因此elem_detail.text一遍又一遍地返回相同的字符串。尽管等待页面完全加载,但似乎驱动程序网页无法跟上该driver.get(url)方法。.get()

来自Selenium-Python/入门

driver.get 方法将导航到 URL 给出的页面。WebDriver 将等待页面完全加载(即“onload”事件已触发),然后再将控制权返回给您的测试或脚本。

我为 插入了预期条件elem_detail,但无济于事。设置time.sleep(2)driver.get(url)允许驱动程序网页更改和显示不同的内容,但随后我将面临严重的减速。即使这样,页面也会不时卡住,并且字典值条目最终会不系统地重复。

您能否推荐一种不涉及的稳健方法time.sleep()


仅供参考:我正在使用 selenium 和 geckodriver。

0 投票
2 回答
37 浏览

java - 如何通过Java使用Selenium通过href属性定位元素

我正在尝试使用href.

我必须使用href="api/Document/GetDocumentByType/25194300-f620-4cc9-a375-419b1ebfe729/1",因为我需要区分都有接受标准但文档链接不同的不同产品。

我目前有:

但它无法定位元素。