GVKun编程网logo

webdriverwait.element_to_be_clickable.click() 不适用于高轮询频率

10

这篇文章主要围绕webdriverwait.element_to_be_clickable.click()不适用于高轮询频率展开,旨在为您提供一份详细的参考资料。我们将全面介绍webdriverwai

这篇文章主要围绕webdriverwait.element_to_be_clickable.click() 不适用于高轮询频率展开,旨在为您提供一份详细的参考资料。我们将全面介绍webdriverwait.element_to_be_clickable.click() 不适用于高轮询频率,同时也会为您带来angularjs – 无法使量角器等待现有元素可点击(condition.elementToBeClickable)、c# – .NET Selenium NoSuchElementException; WebDriverWait.Until()不起作用、c# – 在特定的IWebElement上使用webdriverwait、ClickableSpan 造成 Listview 的 OnItemClickListener 失效的解决办法的实用方法。

本文目录一览:

webdriverwait.element_to_be_clickable.click() 不适用于高轮询频率

webdriverwait.element_to_be_clickable.click() 不适用于高轮询频率

如何解决webdriverwait.element_to_be_clickable.click() 不适用于高轮询频率?

我有一个 URL,我让脚本点击 button_1,这会打开一个带有 button_2 的 pop-up_1。 为了点击 button_2,我使用它来确保 button_2 已准备好被点击:

webdriverwait(self.driver,5).until(expected_conditions.element_to_be_clickable((By.XPATH,"anyPATH"))).click()

它有效。但是因为我想让它尽可能快地工作,所以我将参数 poll_frequency 更改为小于 0.5(我认为这是默认值),如下所示:

webdriverwait(self.driver,5,poll_frequency=0.1).until(expected_conditions.element_to_be_clickable((By.XPATH,"anyPATH"))).click()

然后,尽管 popup_1 被打开,但 button_2 永远不会被点击。我的猜测是,当 poll_frequency 值太低时,webdriverwait 在 popup_1 完全准备好之前开始工作并且 从未找到 button_2,因为它可能在父 URL(而不是 popup_1)中搜索。

我在 webdriverwait 之前插入了 time.sleep(0.5),然后它再次使用 poll_frequency=0.1 工作,但是是否有函数/方法所以我不必使用 time.sleep 和 poll_frequency 的低值?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

angularjs – 无法使量角器等待现有元素可点击(condition.elementToBeClickable)

angularjs – 无法使量角器等待现有元素可点击(condition.elementToBeClickable)

我们有一个Angular 1.5应用程序,它有一个登录屏幕,在应用程序代码和我们的测试中没有任何改变.我们使用量角器(与grunt-protractor等…)
版本:

"dependencies": {
    "async": "^0.9.0","chalk": "^1.1.1","fs-extra": "^0.24.0","grunt": "~0.4.5","grunt-contrib-jshint": "^0.10.0","grunt-protractor-runner": "^4.0.0","grunt-protractor-webdriver": "^0.2.5","jshint-stylish": "^1.0.0","load-grunt-tasks": "~3.1.0","lodash": "^2.4.1","log4js": "^0.6.21","protractor": "^4.0.11","selenium-webdriver": "^3.0.1"
  }

我们所有的测试都采用以下格式:

>登录应用程序并睡觉
>测试(它).每个它都获得done()函数,该函数在测试结束时从browser.sleep(‘1000’)调用.然后(完成)promise(jasmine语法).

describe('login',function () {
    browser.get('/');
    components.login.loginDefault();
    console.log('done login');
    browser.driver.manage().window().maximize(); // just in case the driver wont reach the '.add-new-type' button 
    browser.sleep(1000);
});

describe('post login',function () {
    it('just a test for after user loged in',function (done) {
        console.log('post login');
        const ec = protractor.ExpectedConditions;
        const getStarted = element(by.css('.add-new-type')); // just a button appears on the next page
        console.log('getStarted ' + JSON.stringify(getStarted));
        browser.wait(ec.elementToBeClickable(getStarted),5000);
        console.log('post wait');
        browser.sleep(5000).then(done);
   })});

我们没有更改依赖项版本或在我们的环境中没有任何内容,突然没有任何工作,测试只通过登录阶段然后失败,因为没有找到元素(我猜)并且卡住直到jasmine抛出超时异常

Session created: count=1,browserName=chrome,chromeOptions={args=[--no-sandBox,--test-type=browser,--disable-extensions],prefs={download={default_directory=./e2e/tmp,prompt_for_download=false}}}
node path changed
done login
Started
post login
F

登录后测试只是一个例子,我们尝试了其他方法让驱动程序等待“ExpectedConditions”.
如果我在控制台调试器(chrome)中查找元素,我将正确地获取元素…
我们还试图调试和打印repl模式

element(by.css('.add-new-type')).getText()

行为是一样的 – 没有/没有回应

请问有什么帮助!

解决方法

你有没有尝试过等待元素和网址?

'use strict';

var WaitUtils = function () {

    this.waitElement = function (element,timeout) {
        timeout = timeout || browser.params.time.long;
        var expected = protractor.ExpectedConditions;
        return browser.wait(expected.visibilityOf(element),timeout,"Element not found");
    };

    this.waitUrl = function (url,timeout) {
        timeout = timeout || browser.params.time.long;
        var expected = protractor.ExpectedConditions;
        return browser.wait(expected.urlContains(url),"URL has not contains "+url);
    };
};

module.exports = WaitUtils;

c# – .NET Selenium NoSuchElementException; WebDriverWait.Until()不起作用

c# – .NET Selenium NoSuchElementException; WebDriverWait.Until()不起作用

我们有一个.NET 4.5,MVC,C#项目.我们正在使用Selenium进行UI测试,测试会在我们有wait.Until()的行上间歇性地失败.一个这样的例子是:

NoSuchElementException was unhandled by user code
An exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll but was not handled in user code
Additional information: Unable to locate element: {"method":"css selector","selector":"#assessment-472 .status-PushedToSEAS"}

它就在这里抛出:

Thread.Sleep(600);
wait.Until(drv => drv.FindElement(By.CssSelector("#" + assessmentQueueId + " .status-PushedToSEAS")));

我可以看到浏览器打开,我看到它到达那一点,我可以检查元素以查看元素是否存在.它的id完全正确.

我们有这个问题很多,到目前为止解决方案是在它前面抛出Thread.Sleep(600)(或类似的时间). wait.Until()的重点是不必这样做,这使我们的测试套件变得非常长.另外,正如您在上面的示例中所看到的,有时我们甚至在将Thread.Sleep()放在它前面之后也会遇到问题,我们必须延长时间.

为什么.NET Selenium的WebDriver.Until()不起作用,并且有一种不同的方式来做同样的事情而不需要等待一段时间?同样,问题是间歇性的,这意味着它有时只会发生,它可能发生在任何数量的wait.Until()语句中,而不仅仅是显示的那个!

编辑:

这是一个类变量.
私人WebDriver等等;

它实例化如下:

this.wait = new webdriverwait(driver,TimeSpan.FromSeconds(10));

解决方法

我决定不使用webdriverwait.Until(),而是在主驱动程序上使用隐式等待:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

为了给我这个想法,我在一个不同的问题上充分赞扬了this answer.

c# – 在特定的IWebElement上使用webdriverwait

c# – 在特定的IWebElement上使用webdriverwait

我将selenium webdriverwait方法应用于特定的IWebElement,以便在它们可用时获取此IWebElement的一些子元素.这是我的代码……
webdriverwait wait = new webdriverwait(driver,TimeSpan.FromSeconds(10));
IList<IWebElement> elementsA = wait.Until<IList<IWebElement>>((d) =>
{
     return driver.FindElements(By.XPath("//table[@]"));
});

foreach (IWebElement iwe in elementsA)
{
      wait = new webdriverwait(driver,TimeSpan.FromSeconds(10));
      IList<IWebElement> elementsB = wait.Until<IList<IWebElement>>((d) =>
      {
            return iwe.FindElements(By.XPath("tr/td/div/a"));
            //trying to fetch the anchor tags from the element
       });
}

它一直给我一个错误,说’元素不再附加到DOM’…我认为webdriver等待根本不起作用.我做错了什么人吗?非常感谢提前

解决方法

听起来你正在遭受陈旧元素的困扰.

Selenium发现的每个WebElement实际上都是对DOM内部元素的引用

有时,站点上使用的JavaScript会破坏并重新创建一个元素,当发生这种情况时,您的现有引用会变得陈旧,并且您将看到StaleElementReferenceException(至少这是它在Java领域中所调用的,您应该看到非常相似的东西).

因此,如果您看到StaleElementReferenceException或声明“元素不再附加到DOM”的消息,则意味着您以前对DOM中元素的引用不再有效,因为您引用了该元素已被摧毁.

这在视觉上并不总是很明显,因为原始元素可能已被破坏,然后重新创建了相同的元素,但它是一个新元素,因此您需要创建一个新的引用来与它进行交互.

创建新引用的方法是再次查找该元素.

你的问题并不完全清楚,但我假设你在找到表后迭代锚元素列表时遇到问题.如果是这种情况,则表明该表已被破坏并在您找到表元素的点之间重新创建,然后开始迭代表中的锚元素.

如果是这种情况,您将需要再次找到该表,一个有用的技巧是等待表变为陈旧,然后再尝试再找到它.通过这种方式,您可以合理地确信页面上任何破坏表然后重新创建它的JavaScript都已完成处理. .NET ExpectedConditions class并不像Java ExpectedConditions class那样成熟.我建议看看一些Java并将它们移植到.NET(它应该相当简单,结构非常相似),特别感兴趣的是Java等待元素变得陈旧.

ClickableSpan 造成 Listview 的 OnItemClickListener 失效的解决办法

ClickableSpan 造成 Listview 的 OnItemClickListener 失效的解决办法

@丁佼 你好,想跟你请教个问题:我按照你说的方法,可还是失效,不能点击。不知道是怎么回事

我们今天的关于webdriverwait.element_to_be_clickable.click() 不适用于高轮询频率的分享已经告一段落,感谢您的关注,如果您想了解更多关于angularjs – 无法使量角器等待现有元素可点击(condition.elementToBeClickable)、c# – .NET Selenium NoSuchElementException; WebDriverWait.Until()不起作用、c# – 在特定的IWebElement上使用webdriverwait、ClickableSpan 造成 Listview 的 OnItemClickListener 失效的解决办法的相关信息,请在本站查询。

本文标签: