java - 如何从没有 id 的 html 中读取元素?

标签 java selenium

我有以下 html 片段,我从中提取用户名和密码元素;然后发送用户名和密码并单击提交按钮。

<form name="sign_in" action=https://www.amazon.in/ap/widget method="post">

  <input type="hidden" name="sessionId" value="276-3860748-2761707" />
  <input type="hidden" name="widgetToken" value="X2VuY29kaW5nPVVURjgmb3BlbmlkLmFzc29jX2hhbmRsZT1hbXpuX2Fzc29jaWF0ZXNfaW4mb3BlbmlkLmNsYWltZWRfaWQ9aHR0cCUzQSUyRiUyRnNwZWNzLm9wZW5pZC5uZXQlMkZhdXRoJTJGMi4wJTJGaWRlbnRpZmllcl9zZWxlY3Qmb3BlbmlkLmlkZW50aXR5PWh0dHAlM0ElMkYlMkZzcGVjcy5vcGVuaWQubmV0JTJGYXV0aCUyRjIuMCUyRmlkZW50aWZpZXJfc2VsZWN0Jm9wZW5pZC5tb2RlPWNoZWNraWRfc2V0dXAmb3BlbmlkLm5zPWh0dHAlM0ElMkYlMkZzcGVjcy5vcGVuaWQubmV0JTJGYXV0aCUyRjIuMCZvcGVuaWQubnMucGFwZT1odHRwJTNBJTJGJTJGc3BlY3Mub3BlbmlkLm5ldCUyRmV4dGVuc2lvbnMlMkZwYXBlJTJGMS4wJm9wZW5pZC5wYXBlLm1heF9hdXRoX2FnZT0wJm9wZW5pZC5yZXR1cm5fdG89aHR0cHMlM0ElMkYlMkZhZmZpbGlhdGUtcHJvZ3JhbS5hbWF6b24uaW4lMkYlM0ZfZW5jb2RpbmclM0RVVEY4JTI2KlZlcnNpb24qJTNEMSUyNiplbnRyaWVzKiUzRDAmc2hvd1Jtck1lPTE=:SkFuUUJZQW8zS0lhSm5RN3dsWUVlV0ttdmErZ3J2N3BjYW5naVFKTitOND06MQ==">
  <input type="hidden" name="path" value="/gp/associates/login/login.html" />
  <input type="hidden" name="query" value="returl=/gp/associates/join/landing/main.html&amp;retquery="/>
  <input type="hidden" name="action" value="sign-in" />
  <input type="hidden" name="mode" value="1" />
  <div class="formLabel">Email address</div>
  <div class="formInput"><input type="text" name="username" id="username" value="" class="text" /></div>
  <div class="formLabel">Password </div>
  <div class="formInput"><input type="password" name="password" id="password" value="" class="text" /></div>
  <input type="checkbox" name="rememberMe" value="true" >Stay Signed In<br>
  <p id="signin">
    <input type="image" src="https://images-na.ssl-images-amazon.com/images/G/31/associates/network/sign-in-md-pri._V138360034_.gif"  width="69" alt="Sign In" value="Sign In" height="22" border="0" />
    <a id="needHelp" href="http://affiliate-program.amazon.in/gp/associates/login/help.html">Need help?</a>
  </p>
<script id="fwicm-script" type="text/javascript" src="https://images-na.ssl-images-amazon.com/images/G/31/x-locale/common/login/fwcim._V342129342_.js"></script>
<script type="text/javascript">
    fwcim.profile()
</script>

</form>

我正在使用 selenium firefox 驱动程序。我的代码片段是 -

FirefoxDriver driver = new FirefoxDriver();

WebElement emailField=driver.findElement(By.id("username"));
emailField.sendKeys(login);

WebElement passwordField=driver.findElement(By.id("password"));
passwordField.sendKeys(passwd); 

val signInButton = driver.findElement(By.id("signin"));
signInButton.click();

现在,最后一行代码不起作用,因为 id="signin"不是输入行的一部分。

  <p id="signin">
    <input type="image" src="https://images-na.ssl-images-amazon.com/images/G/31/associates/network/sign-in-md-pri._V138360034_.gif"  width="69" alt="Sign In" value="Sign In" height="22" border="0" />
    <a id="needHelp" href="http://affiliate-program.amazon.in/gp/associates/login/help.html">Need help?</a>
  </p>

FirefoxDriver 中没有按值读取元素的方法,因此我可以读取 value="Sign In"。我尝试通过 Jsoup 读取元素,转换为字符串并转换为 Selenium Web 元素,但出现错误。

ClassCastException: java.lang.String cannot be cast to org.openqa.selenium.WebElement

我怎样才能使 signInButton.click() 起作用?

最佳答案

为按钮分配一个 ID,或使用不同的选择器。例如:

driver.findElement(By.cssSelector("#signin input"));

关于java - 如何从没有 id 的 html 中读取元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30393793/

相关文章:

java包 "mylist"不存在

java - 使用 selenium 将内容拖放到文本框中

java - Selenium - 在java中编写错误检查的最佳方法?

css - Selenium IDE - 如何检查元素是否 (CSS) 可见?

python - Selenium WebDriver 可以单击下拉菜单中的所有组合吗

java - 线程 "main"中的异常 org.openqa.selenium.WebDriverException : Timed out waiting 45 seconds for Firefox to start after geckodriver upgradation

java - 如果发送 JMS 消息时没有 JMSPriority header ,会发生什么情况

java - 由于数据库连接,我是否需要为 Web 服务重写我的项目?

java - 您如何使用带有 apache commons httpclient 的 NTLM 身份验证以编程方式对 Web 服务器进行身份验证?

java - 在 Spring XML 中声明整数、 double 、 float 、字符串等