我想知道硒能在下面做吗?我想自动化 自动化流程的某些部分:
我熟悉的唯一选项是在浏览器> inspect>控制台中编写和运行修改表单元素的自定义JS。对于上面,我将不得不在每个页面上运行不同的功能。为此,我可以注释除了所需的函数调用之外的所有函数并运行它。我想我不能从控制台中选择和运行代码的一部分(例如第1页)。
PS:如果任何一个严格的SO人认为这不适合SO,那么还有什么地方可以找到适合这类东西的好工具(以自动化为中心?)?答案 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()