我可以使硒暂停输入并在触发时恢复吗?

dbz*_*bza 5 javascript selenium ui-automation angularjs

我想知道硒是否可以在下面发挥作用?我要自动在自动化流程的某些部分:

  1. 加载网页(使用角度构建),使用一些预定义的输入提交表单
  2. 在下一页上,像之前一样自动填写一些数据,但是请耐心等待我在特定输入字段上填写一些输入(无法对这些数据进行硬编码)
  3. 之后,触发器(如按钮按下或组合键;在网页外部)应与其余自动流程一起进行,并降落在第3和第4页,依此类推。

我熟悉的唯一选择是在浏览器>检查>控制台中编写并运行修改表单元素的自定义JS。对于以上内容,我将必须在每个页面上运行不同的功能。为此,我可以注释掉所有必需的函数调用,然后运行它。我想我不能从控制台中选择和运行仅一部分代码(例如,对于第1页)。

PS:如果有任何严格的SO人士认为这不适合SO,那么还有什么地方(针对自动化的重点)寻找合适的工具呢?

Sah*_*wal 6

注意:我通过 python 使用了 selenium,所以解决方案反映了这一点。

哦耶。这只是一个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()
Run Code Online (Sandbox Code Playgroud)


Shi*_*hra 5

选项1:

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

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
}
Run Code Online (Sandbox Code Playgroud)

选项 2:

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

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
driver.switchTo().defaultContent();
Run Code Online (Sandbox Code Playgroud)

现在执行将开始,并在您希望脚本停止以便您手动输入数据的地方,在无限循环中从 selenium 中检索所有选项卡,如下所示 -

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
Run Code Online (Sandbox Code Playgroud)

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

你也可以试试这个