使用其ID识别对象的问题?

时间:2015-11-03 20:33:43

标签: selenium-webdriver

enter image description here enter image description here我正在开发一个Salesforce应用程序,我正在尝试从下拉列表中为我的测试用例选择一个值,但我不断收到NoSuchElement异常。 我试图使用其ID

来识别对象
public void enterStep1Details()
{
    WebElement element = driver.findElement(By.id("pageid:theform:Block:NewHireRequisitionId:hm:HiringId"));
    element.sendKeys("C");
}

以下是HTML代码

<select id="pageid:theform:Block:NewHireRequisitionId:BusinessSegment:selectedReqTypeId" name="pageid:theform:Block:NewHireRequisitionId:BusinessSegment:selectedReqTypeId" size="1" onchange="A4J.AJAX.Submit('pageid:theform',event,{'similarityGroupingId':'pageid:theform:Block:NewHireRequisitionId:BusinessSegment:j_id57','oncomplete':function(request,event,data){RefreshText();},'parameters':{'pageid:theform:Block:NewHireRequisitionId:BusinessSegment:j_id57':'pageid:theform:Block:NewHireRequisitionId:BusinessSegment:j_id57'} } )" style="width:200px">
   <option value=""></option>
   <option value="Clinical Informatics">Clinical Informatics</option>
   <option value="Corporate Services">Corporate Services</option>
   <option value="Early Development Services">Early Development Services</option>
   <option value="Executive Office">Executive Office</option>
   <option value="Late Phase Services">Late Phase Services</option>
   <option value="Product Registration">Product Registration</option>
   <option value="Strategic Solutions">Strategic Solutions</option>
   <option value="Therapeutic Expertise">Therapeutic Expertise</option>
</select>

3 个答案:

答案 0 :(得分:1)

从它的外观看,它是从其他部分构建的,因此您可能需要使用整个ID来确保它在页面上是唯一的。您可以尝试使用AGill的答案,但我会使用整个ID。

WebElement element = driver.findElement(By.id("pageid:theform:Block:NewHireRequisitionId:BusinessSegment:selectedReqTypeId"));

在与OP交谈之后,结果是元素在IFRAME中。下面是如何处理这个问题的一个例子。

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

完成框架后,请确保切换回默认内容。

driver.switch_to.default_content()

还有其他选项可以访问IFRAME,但这应该可以让您入门。

答案 1 :(得分:0)

你可以为此编写一个css选择器。查找id的静态部分,例如查找前缀或后缀或任何唯一且静态的子字符串,并使用它来编写css选择器。

例如,如果id以文字结尾&#34; selectedReqTypeId&#34;你可以写

By.cssSelector("[id$=selectedReqTypeId]")

您也可以写matching patternsubstring,如:

By.cssSelector("[id*='pattern']")

或根据您给定的代码,您可以编写

By.cssSelector("[id*='NewHireRequisitionId']") //just an example

同样对于startsWith,你可以写:

By.cssSelector("[id^=startingText]")

答案 2 :(得分:0)

如果元素在框架中,则需要使用switchTo()进入框架以访问元素。您应该能够在此处和其他地方找到有关SO的大量参考资料。 - JeffC 21小时前