【问题标题】:Selenium Webdriver Actions - can I replace deprecated pause method with something else?Selenium Webdriver Actions - 我可以用其他东西替换不推荐使用的暂停方法吗?
【发布时间】:2014-07-22 16:30:50
【问题描述】:

我注意到在 Selenium Webdriver (http://selenium.googlecode.com/git/docs/api/java/index.html) 中不推荐使用 pause() 方法

暂停确实是一种不好的做法,但是我该如何模拟以下场景呢? :

  • 转到网页
  • 选择呈现为图像的文本(DRM 原因,上面有一个额外的逻辑层)
  • 做点什么……

这里的问题是,如果我执行 moveToElement().clickAndHold().moveToOffset() 得到的实际上是“swype”,页面上有这样的功能。我想要的是单击并按住元素,模拟人类行为的一点暂停(100 毫秒绰绰有余)。如果没有 pause(),我看不到另一种方法。有吗?

【问题讨论】:

  • 您找到解决方案了吗?
  • 在 Google 代码中,an issue 存在于此(可能与此问题是同一个人?),以及 a new implementation suggestion
  • 是的,Geert,我忘了那个,Google Code 似乎不会一直发送更新。结束问题,谢谢!

标签: selenium selenium-webdriver ui-automation


【解决方案1】:

您还没有说您使用什么语言绑定来编写 WebDriver 测试,但在 C# 或 Java 中您可以只使用 Thread.Sleep(100)。我确信在所有其他语言中都有对应的。或者我认为 WebDriverWait laterBy(long durationInMillis) 会和 Thread.Sleep 做同样的事情。

我个人希望尽可能快地执行测试,因此我有一个自定义等待方法,等待元素出现并可见,然后再允许下一步。

在下面的示例中,thread.sleep 被插入到 sendKeys 和 assertEquals 步骤之间。

      @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "https://www.google.co.uk/";
  }

  @Test
  public void test1() throws Exception {
    driver.get(baseUrl + "/");
    driver.findElement(By.id("gbqfq")).sendKeys("selenium");
    thread.sleep(100);
    assertEquals("selenium", driver.findElement(By.cssSelector("cite._Pd > b")).getText());
  }

【讨论】:

  • 这是java。您如何将 Thread.sleep() 粘贴到 Actions 链中?看起来我的解释不是很好,我提到在 clickAndHold() 之后没有暂停,该操作会在页面上执行“swype”。它实际上与同步、等待元素存在等无关。
  • 我在我给出的答案中添加了一个示例。
  • 再一次,这是完全不同的事情,我说的是 Actions API。在你的例子中,我不会使用睡眠,只是因为你不能 100% 确定 100 毫秒总是足够的。我会改为使用 WebDriverWait。但不幸的是,这不适用于我的场景。我说的是选择文本,一个在我们的应用中触发事件的动作。
猜你喜欢
  • 1970-01-01
  • 2011-04-13
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2023-02-26
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多