我可以让selenium暂停输入并在触发器上恢复吗?

时间:2018-06-13 19:50:34

标签: javascript angularjs selenium ui-automation

我想知道硒能在下面做吗?我想自动化 自动化流程的某些部分:

  1. 加载网页(使用角度构建),提交表格 预定义输入
  2. 在下一页上,自动填写一些 像之前的数据,但等待我填写具体的一些输入 输入字段(不能硬编码此数据)
  3. 此后,触发器(如按钮 按或键组合;在网页之外)应该继续其余的自动化流程和土地 在第3页和第4页,依此类推。
  4. 我熟悉的唯一选项是在浏览器> inspect>控制台中编写和运行修改表单元素的自定义JS。对于上面,我将不得不在每个页面上运行不同的功能。为此,我可以注释除了所需的函数调用之外的所有函数并运行它。我想我不能从控制台中选择和运行代码的一部分(例如第1页)。

    PS:如果任何一个严格的SO人认为这不适合SO,那么还有什么地方可以找到适合这类东西的好工具(以自动化为中心?)?

3 个答案:

答案 0 :(得分:3)

选项1:

使用显式等待可以轻松实现。假设您要在某个字段中手动输入数据。您可以让硒等待直到字段包含值的点(其“值”属性不为空)。例如:

WebDriverWait wait = new WebDriverWait(driver, 100);
//whatever time you think is sufficient for manually entering the data.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(>someid>)));
if(ExpectedConditions.attributeToBeNotEmpty(element,"value"))
{
  //continue with the automation flow
}

选项2:

有点怪。您可以做的是,在执行开始时打开另一个选项卡,然后切换回原始选项卡,如下所示:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
driver.switchTo().defaultContent();

现在将开始执行,并在您希望脚本停止供您手动输入数据的位置上,以这种无限循环从硒中检索所有选项卡-

for(int i =1;i>0;i++)
{
 ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
 if(tabs.size()==2)
 {
  //keep checking for the point when the number of tabs becomes 1 again.
  continue;
 }
 else
 {
  break;
 }
}
//your rest of the automation code

这个想法是让硒暂停执行(因为它会被卡在循环中),直到制表符数量再次变为1为止。在此期间,您输入数据并关闭空选项卡,以便硒可以继续执行。

您也可以尝试this

答案 1 :(得分:0)

硒中有几种等待物。

  

隐式等待:在隐式等待期间,如果Web驱动程序由于其可用性而无法立即找到它,它将继续轮询(大约250毫秒)DOM以获取该元素。如果元素在指定的时间内不可用,则将引发NoSuchElementException。默认设置为零。设置时间后,Web驱动程序将等待WebDriver对象实例的句点。

     

显式等待:特定元素可以有实例   加载超过一分钟。在那种情况下,你绝对不喜欢   为Implicit wait设置了一个巨大的时间,就像你这样做你的浏览器一样   要为每个元素等待相同的时间。

     

为了避免这种情况,你可以简单地在上面单独设置一下   仅需要的元素。按照这个你的浏览器隐式等待   每个元素的时间都很短,而且它会很大   具体要素。

     

流利等待:假设您有一个元素出现在某个时间   只需1秒钟,有时需要几分钟才能出现。在这种情况下   最好使用流畅的等待,因为这将尝试找到元素   一次又一次,直到找到它或直到最后的计时器用完为止。

https://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

http://toolsqa.com/selenium-webdriver/implicit-explicit-n-fluent-wait/

答案 2 :(得分:0)

注意:我已经通过python使用了硒,因此解决方案反映了这一点。

哦,是的。这只是一个python脚本。硒脚本不要用术语来考虑。可以很容易地使python脚本等待输入。

print("Hi!. Script Started")
# code to load webpage, automatically fill whatever can be entered
x = input("Waiting for manual date to be entered. Enter YES when done.")
# Enter the data on page manually. Then come back to terminal and type YES and then press enter.
if x == 'YES':
    continue_script_here()
else:
    kill_script_or_something_else()