相关疑难解决方法(0)

何时在Selenium Webdriver中使用显式等待vs隐式等待?

我在用:

driver.manage().timeouts().implicitlyWait(180, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

但是对于下面的元素,它仍然会不断失败

    driver.findElement(By.id("name")).clear();
    driver.findElement(By.id("name")).sendKeys("Create_title_01");
Run Code Online (Sandbox Code Playgroud)

我添加了等待代码:

for (int second = 0;; second++) {
        if (second >= 120) fail("timeout");
        try { if (isElementPresent(By.id("name"))) break; } catch (Exception e) {}
        Thread.sleep(1000);
    }
Run Code Online (Sandbox Code Playgroud)

不应该隐含等待,直到找到一个元素?如果我使用显式等待而不是我添加的代码,它会更好Thread.sleep()吗?

java selenium selenium-webdriver

46
推荐指数
3
解决办法
7万
查看次数

澄清混合Selenium doc的隐式和显式等待的原因

我正在阅读SeleniumHQ文档并遇到以下声明.

"警告:不要混合隐式和显式等待.这样做可能会导致不可预测的等待时间.例如,设置10秒的隐式等待和15秒的显式等待可能会导致20秒后发生超时."

出于某种原因,我无法理解这一点.总超时20秒是我的主要困惑点.任何人都可以解释我是否遗漏了什么?

编辑

我的问题不是关于混合这些等待的实施/后果.它完全是关于doc上的语句和超时计算.

第二次编辑

根据下面的测试,看起来文档是正确的.我仍然需要解释.

只是暗示等待

using System;
using System.Diagnostics;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace Test
{
    [TestFixture]
    public class Test
    {
        private IWebDriver _webDriver;

        [Test]
        public void ExplicitVsImplicitWaitTest()
        {
            _webDriver = new ChromeDriver();
            _webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
            _webDriver.Navigate().GoToUrl("https://www.google.com/");
            _webDriver.Manage().Window.Maximize();

            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();

            try
            {
                //new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15)).Until(
                //ExpectedConditions.ElementExists(By.CssSelector("Should Fail")));
                _webDriver.FindElement(By.CssSelector("Should Fail"));
            }
            catch ( NoSuchElementException exception)
            //catch ( OpenQA.Selenium.WebDriverTimeoutException)
            {
                stopwatch.Stop();
                Console.WriteLine(stopwatch.Elapsed);
            }

            _webDriver.Quit();

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

时间秒:00:00:10.0167290

只是明确等待

using System; …
Run Code Online (Sandbox Code Playgroud)

selenium webdriver selenium-webdriver

19
推荐指数
1
解决办法
3755
查看次数

WebDriverWait在使用两者时是否会覆盖ImplicitlyWait?

我使用python + selenium webdriver进行自动化.我已经使用了ImplicitlyWait和WebDriverWait.

问题:

  1. 在单个脚本中同时使用ImplicitlyWait和WebDriverWait是一个好习惯吗?

  2. 假设我的ImplicitlyWait值为20,WebDriverWait值为10秒.WebDriverWait在等待特定元素时会覆盖20吗?当ImplicitlyWait值小于WebDriverWait时会发生什么?

请建议.我尝试在互联网上找到这个答案,但没有得到任何完整的证据或令人信服的答案.

python selenium webdriver

5
推荐指数
1
解决办法
2579
查看次数

机器人selenium2library如何设置全局等待元素

我想问一下机器人中是否有一个选项(使用selenium2library)来设置一些隐含的等待所有元素,这些元素应该在测试期间只在一个地方找到?目前我将EACH元素中的等待放在我的关键字中(看起来不太好)

Wait Until Element Is Visible    ${repeated for each element}
Run Code Online (Sandbox Code Playgroud)

前端是在Angular中制作的.我发现它可能是麻烦的原因,我也发现了一些扩展的selenium2library,但是我不能使用这个扩展库,因为我只能使用官方支持的库(现在只是selenium2library)...

我还尝试在导入库时设置implcit等待和超时,但它似乎没有帮助(如果我在每个元素之前评论我的"等待",它会再次开始失败)

Library    Selenium2Library    10    15
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?在这种情况下,我真的必须在每个元素之前等待吗?

谢谢

automated-tests wait robotframework angularjs selenium2library

5
推荐指数
1
解决办法
540
查看次数

Selenium - 在每行代码之后等待

我正在使用Selenium(python)来测试Web应用程序.但是,有时一行代码会触发错误,导致第一行没有足够的时间来运行.例如:

...
driver.find_element_by_id("form_widget_date").click()
driver.find_element_by_link_text(str(self.day)).click()
...
Run Code Online (Sandbox Code Playgroud)

其结果是,第二行(有时)woudn't找到LINK_TEXT因为硒,显然,没有足够的时间完成第一线.当我在线之间进行睡眠时,不会发生错误.

我的问题是:有没有办法让每行代码自动等待一段时间,而不是像这样解决它:

...
time.sleep(2)
driver.find_element_by_id("form_widget_date").click()
time.sleep(2)
driver.find_element_by_link_text(str(self.day)).click()
time.sleep(2) 
...
Run Code Online (Sandbox Code Playgroud)

?

python selenium webdriver

2
推荐指数
1
解决办法
3390
查看次数