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>
答案 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 pattern
或substring
,如:
By.cssSelector("[id*='pattern']")
或根据您给定的代码,您可以编写
By.cssSelector("[id*='NewHireRequisitionId']") //just an example
同样对于startsWith
,你可以写:
By.cssSelector("[id^=startingText]")
答案 2 :(得分:0)
如果元素在框架中,则需要使用switchTo()进入框架以访问元素。您应该能够在此处和其他地方找到有关SO的大量参考资料。 - JeffC 21小时前