CustomAuthenticationProvider
我正在尝试使用以下简单代码来打开google页面并搜索“自动化”一词,但是我得到了此结果,并且程序在此行停止运行:
sysctl -w net.ipv4.conf.[IFNAME].route_localnet=1
iptables -t nat -A PREROUTING -p tcp -d 192.168.22.100 --dport 4444 -j DNAT --to 127.0.0.1:3333
iptables -A INPUT -i ens192 -p tcp --dport 4444 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens192 -p tcp --sport 4444 -m state --state ESTABLISHED -j ACCEPT
class
出什么问题了?
答案 0 :(得分:2)
请检查“ find_element_by_name”中的搜索按钮或使用xpath。
我在Java中运行脚本。 希望这对您有帮助...
要找到 xpath ,请使用 Selenium IDE 。
,代码如下:-
WebDriver driver =new FirefoxDriver();
driver.get("https://www.google.com");
WebDriverWait wait = new WebDriverWait (driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@name='q']")));
WebElement ele = driver.findElement(By.xpath("//input[@name='q']"));
ele.sendKeys("q");
driver.findElement(By.xpath("(//input[@name='btnK'])[2]")).sendKeys(Keys.ENTER);
并且一个建议删除'thread.sleep',因为它会在提及时间停止程序。
Thread.sleep():在睡眠代码中,即使工作页面在1秒钟后准备就绪,代码也会始终在括号内等待提及的秒数。因此,这会使测试变慢。
显式等待:显式等待是一种等待特定条件发生然后再继续执行代码的等待。
隐式等待:隐式等待是告诉WebDriver在尝试查找不立即可用的一个或多个元素时,在一定时间内轮询DOM。默认设置为0
Is it good practise to use Thread.sleep while doing selenium Test?
已编辑:
也请参考此https://stackoverflow.com/a/56078618/4513879答案。
Element is not reachable by keyboard
用简单的词表示无法使用键盘访问该元素,这意味着您甚至都不会与之进行物理交互。避免使用JS单击。用户无法单击不可见,被遮盖或不在屏幕上的元素,等等。Selenium旨在像用户一样操作,并在用户无法单击元素时引发错误。
有关更多信息,请通过https://stackoverflow.com/a/49872160/4513879回答此问题。
更新代码:-
WebDriver driver =new FirefoxDriver();
driver.get("https://www.google.com");
WebDriverWait wait = new WebDriverWait (driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@name='q']")));
WebElement ele = driver.findElement(By.xpath("//input[@name='q']"));
ele.sendKeys("q");
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.name("btnK"))).click();
在上面添加的代码中,
new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable(By.name("btnK"))).click();
这一行。
答案 1 :(得分:0)
K应该是大写字母。区分大小写
更改此:
driver.find_element_by_name("btnk").send_keys(keys.ENTER)
对此:
driver.find_element_by_name("btnK").send_keys(keys.ENTER)
其他一些观察结果……似乎有两个元素具有完全相同的属性,因此您可能仍然会对此产生疑问。
作为该问题的一种可能的解决方法,您可以尝试使用此方法代替find_element_by_name
:
from selenium.webdriver.support import expected_conditions as EC
EC.element_to_be_clickable(By.name("btnK"))).click()
此外,我想用按钮来代替click
,send_keys
干杯:)