Selenium Webdriver:Java:跨度Web元素识别

时间:2016-01-04 15:23:19

标签: java selenium webdriver

我正在使用selenium webdriver,我正在尝试为span标签找到一个文本框,但我没有运气。我能够找到一个div id的simliar文本框,所以我猜它有作为Span ID的东西。使用xpath我生成这个:

.//*[@id='rtbPrefix'] 

因此,这是我创建的WebElement:

@FindBy(xpath=".//*[@id='rtbPrefix']")
WebElement txtPrefix_AddContact;

请告知我如何找到这个项目,如果我应该使用css,如果是这样,请告诉我如何找到该元素。以下是元素的信息:

<table>
<tbody>
<tr>
<td class="ContactLeftLabelCol">
<td class="ContactLeftInputCol">
<span id="rtbPrefix_wrapper" class="riSingle RadInput RadInput_Metro" style="width: 50px;" title="Enter the contact's title (Mr., Ms., Dr., etc. ">
<input id="rtbPrefix" class="riTextBox riEnabled riHover" type="text" value="" title="Enter the contact's title (Mr., Ms., Dr., etc. " size="20" name="rtbPrefix"/>
<input id="rtbPrefix_ClientState" type="hidden" name="rtbPrefix_ClientState" autocomplete="off" value="{"enabled":true,"emptyMessage":"","validationText":"","valueAsString":"","lastSetTextBoxValue":""}"/>
</span>
</td>
</tr>

根据以下说明进行更新

    @FindBy(xpath = "//frame[.//input[@id = 'rtbPrefix']]")
        WebElement iframe_Contacts; 

public void Add_Prefix_NewContact(){

        iframe_Contacts.sendKeys("Mr.");
        //txtPrefix_AddContact.sendKeys("Mr.");
    }

根据回复的每条指令更新了webelemnt,然后在下面是我在方法中实现的地方

public void CreateANewContact(){
    NewContactClick();

    base.getDriver().switchTo().frame(iframe_Contacts);
    Add_Prefix_NewContact();
    Add_FirstName_NewContact();
    Add_MiddleName_NewContact();
    Add_LastName_NewContact();
    Add_Suffix_NewContact();
    Add_Primary_NewContact();
    Add_JobTitle_NewContact();
    Add_Email_NewContact();
    Add_Phone_NewContact();
    Add_Mobile_NewContact();
    Add_Fax_NewContact();
    Add_Address_NewContact();
    Add_Country_NewContact();
    Add_Zip_NewContact();
    Add_City_NewContact();
    Add_State_NewContact();
    btnSaveClose_AddContact.click();
    Reporter.log("A New Contact Was Successfully Added!!!");
    base.getDriver().switchTo().defaultContent();
}

2 个答案:

答案 0 :(得分:0)

尝试:

WebDriver driver;
WebElement webElement = driver.findElement(By.id("rtbPrefix_wrapper"));

答案 1 :(得分:0)

  

是的,它在iframe中

你必须切换到框架的上下文,然后搜索里面的元素:

driver.switchTo().frame("name_or_id");

WebElement webElement = driver.findElement(By.id("rtbPrefix"));

如果框架上没有定义idname,您可以按索引找到它:

driver.switchTo().frame(0);  // switch to the first frame

或者,使用findElement找到它:

WebElement frame = driver.findElement(By.xpath("//frame[.//input[@id = 'rtbPrefix']]");
driver.switchTo().frame(frame);