当前位置: 首页 > 知识库问答 >
问题:

元素还没有准备好被选择,但是wait.until()仍然继续不管?

柳仲卿
2023-03-14

我不熟悉Selenium,也不熟悉Java。我是一名测试人员,而不是开发人员,所以我正试图逐渐将我的Selenium IDE脚本转换成更健壮和“合适”的东西。不幸的是,我正在努力完成一项相当基本的任务。网页加载后,我想单击一个按钮。这在Selenium IDE中运行良好,但前提是我将速度设置为“slow”。

我可以使用下面的代码让它工作,但前提是我包含了线程。睡眠线。我已经读到这不是一个好主意,所以我正在尝试使用webDriverWait实现一些更智能的东西。

public class mytestclass {

    private WebDriver driver;
    private String baseUrl;

    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "";
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    }


    @Test
    public void test1() throws Exception {
        driver.get(baseUrl + "file:///C:/_VM/testpage.html");
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.elementToBeClickable(By.id("button_X")));
        //Thread.sleep(2000);
        driver.findElement(By.id("button_X")).click();    
     }

}

因此,当执行线程时,这是有效的。睡眠线让我相信等待。直到当按钮未实际就绪时,行返回true。我还尝试将预期条件切换到其他标识符,如visibilityOfElementLocated(按定位器)和presenceOfElementLocated(按定位器),但它们的作用方式也是一样的。

我是不是做错了什么?还有什么我可以试试的吗?

我恐怕无法链接到该网站,因为它与工作有关。它确实在启动时读取了大量图像并运行了大量javascript,因此需要一些时间才能开始,但这就是为什么我想在中添加等待逻辑

谢谢你的任何建议。

共有1个答案

司徒浩思
2023-03-14

您的网站启动是否涉及jQuery?如果有,你可以试试这个。我发现它在我的测试中很有帮助。它在C#中,但我相信你可以将它转换为java。

等待jQuery准备就绪:

IWait<IWebDriver> wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(WAITFORELEMENT_TIMEOUT));
wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));
 类似资料:
  • 我刚刚在RHEL 8上安装了Kibana7.3。Kibana服务处于活动状态(正在运行)。 当我卷曲到http://localhost:5601时,我收到了消息。我的Elasticsearch实例在另一台服务器上,它正在成功响应我的请求。我已经用它更新了kibana.yml elasticsearch.hosts:["超文本传输协议://EXTERNAL-IP-ADDRESS-OF-ES: 920

  • 问题内容: 我注意到人们建议不要混合使用Swing和AWT ,但是我们看到了很多: 因此,为什么许多包括Java的人(因为我在这里从他们的教程中得到了答案)仍然使用AWT导入,尽管我看到它主要用于s。 你如何添加 本地 的Swing S /图书馆像的东西,,冲床/ slections等? 还是我会用?(尽管与Java Bean有关) 现在已经让我困惑了一段时间,我的大多数应用程序都具有Swing和

  • 我有一个简单的功能,我想测试,但明显的结果是没有发生。。。 我的函数是如何工作的(实际上它确实工作,只是没有正确测试) 我将字符串传递到函数中 当我运行所示的测试时,我收到错误: 预期默认值等于hare失败 我的组件 我的测试

  • 问题内容: 我有一个ListView子类,当上下文操作栏(CAB)处于活动状态时,我可以对其进行选择。CAB设置为事件的回调: 很好,并且ListView可以按预期工作,当前选中的项目在触摸时保持突出显示。 当我关闭CAB时, 我希望ListView返回正常状态(即Touch模式) 。问题是,无论我尝试清除哪种方法,最后选择的项目都会无限期突出显示: 有什么建议? 问题答案: 出现此问题的主要原因

  • 我是一个对使用python相当陌生的爱好者。自从我安装 Pygame 以来已经一周了,经过多次尝试,当我运行任何程序时,我仍然无法启动或打开 Pygame 窗口。我已经看了尽可能多的教程,并阅读了我能找到的关于类似问题的所有文章。我已经复制了在其他网站上找到的所有解决方案,但问题仍然存在。然而,更奇怪的是,我正在使用的IDE(Pycharm)很少输出错误消息,而是简单地继续运行,但从未启动Pyga

  • 我有一个骆驼路线如下。虽然我设置了处理(true),但我不明白为什么defaul在所有重试都耗尽后,defaul的处理程序会调用的。 日志: 20.04.03 11:46:53.907 INFO ad #6 - timer://testRoute route1 面包屑 Id=ID-xxxxxx-1585894556662-0-4 |世界您好 20.04.03 11:46:53.913错误广告#6-