selenium webdriver错误send_keys(Keys.ENTER)

时间:2019-05-10 12:27:41

标签: selenium module sendkeys

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

出什么问题了?

2 个答案:

答案 0 :(得分:2)

请检查“ find_element_by_name”中的搜索按钮或使用xpath。

我在Java中运行脚本。 希望这对您有帮助...

要找到 xpath ,请使用 Selenium IDE

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()

此外,我想用按钮来代替clicksend_keys

干杯:)