我正在尝试使用Selenium编写Gmail登录程序。我可以点击URL,输入用户名,然后点击"下一步"按钮,但当我重定向到"密码"字段页面我无法找到该元素。我使用by.className尝试了相同的操作。以下是字段的检查代码:
<input class="whsOnd zHQkBf"
jsname="YPqjbf"
autocomplete="current-password"
spellcheck="false"
tabindex="0"
aria-label="Enter your password"
name="password"
autocapitalize="off"
autocorrect="off"
dir="ltr"
data-initial-dir="ltr"
data-initial-value=""
badinput="false"
type="password">
以下是我写过的硒代码:
driver.findElement(By.className("whsOnd zHQkBf")).sendKeys("Password");
我也尝试使用ID,使用父<div id ="password"....>
,但它没有用。
请让我知道解决方案。
答案 0 :(得分:2)
whsOnd zHQkBf
表示该元素有两个CSS类whsOnd
和zHQkB
。所以你找不到任何名为whsOnd zHQkBf
的类。
您必须使用CSS选择器来查找具有多个类的元素,如下所示:.whsOnd.zHQkBf
。但这与谷歌登录页面上的多个元素相匹配。使用以下CSS选择器input[type='password']
更容易。
答案 1 :(得分:1)
使用以下代码
driver.findElement(By.cssSelector("[name=\"password\"]")).sendKeys("Password");
答案 2 :(得分:1)
请使用以下代码
driver.findElement(By.cssSelector("input[type='password']")).sendKeys("Password");
答案 3 :(得分:1)
name
定位器最简单:
driver.findElement(By.name("password")).sendKeys("Password");
答案 4 :(得分:1)
这可能会对您有所帮助:
driver.findElement(By.xpath(".//*[@id='password']//input[@name='password']")).sendKeys("Password");
答案 5 :(得分:0)
driver.findElement(By.className(&#34; whsOnd zHQkBf&#34;))。sendKeys(&#34; Password&#34;);
嗨,哥们,
您编写的语句是错误的类名,因为它是一个复合类,我们不能使用复合类来定位元素。用户名和密码字段是使用angular-JS开发的,因此当点击登录URL时,将下载用户名和密码,但是仅显示用户的用户名,因此密码是隐藏的背景
尝试此代码,这肯定会起作用,因为我已经尝试过了
driver.findElement(By.xpath(&#34; // [@ ID =&#39;密码&#39;] /子:: [1] /子:: /子:: /子:: *&#34))的SendKeys(&#34;密码&#34);
希望你得到答案 快乐测试
答案 6 :(得分:0)
以下代码对我有用。某些时间元素将不可单击,因此使驱动程序等待某些可预期的事件(如可单击)发生。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[type=password));
driver.findElement(By.cssSelector("input[type=password]")).sendKeys("your password");