Как исправить ошибку при идентификации элемента с помощью xpath для SAP Fiori UI - PullRequest
0 голосов
/ 12 февраля 2019

Я пишу сценарий селена для идентификации элемента и отправки ключей для него для интерфейса SAP.

Это для приложения пользовательского интерфейса SAP Fiori.

Несмотря на то, что у меня есть xpathИдентифицированный является уникальным, когда я запускаю код в chrome, он не идентифицирует элемент.

Ниже приведен мой код:

public static void main(String[] args) {
    // declaration and instantiation of objects/variables
    String baseURL = "https://mercury.abc.net/default.aspx";

    WebDriver driver;
    System.setProperty("webdriver.chrome.driver", 
    "C:\\Users\\abcde\\Desktop\\Eclipse\\Selenium 
     Practice\\libs\\chromedriver.exe");

    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("useAutomationExtension", false);
    driver = new ChromeDriver(options);

     // launch Chrome and direct it to the Base URL
    driver.get(baseURL);

    WebElement MyTimesheetButton = 
    driver.findElement(By.id("Tile_WPQ8_8_7"));
    MyTimesheetButton.click();

    WebDriverWait wait = new WebDriverWait(driver, 20);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//* 
    [@id=\"WD027B\"]"))); 

    WebElement Engagement =  
    driver.findElement(By.xpath("//[@id=\"WD027B\"]"));
    Engagement.sendKeys("test");

    //close Chrome
    driver.close();

}

Я должен получить ожидаемый результат, поскольку элемент идентифицирован и данные введены в ключ.элемент, но я получаю фактический результат, как показано ниже:

Cannot locate an element using By.xpath: //*[@id="WD027B"]

HTML:

<iframe role="main" frameborder="0" title="The title of the hosted application within the canvas area: My Timesheet" '="" src="/nwbc/ZEP3_FIN_TM_ENTRY_DYNPRO_MSTR/?sap-client=200&amp;sap-language=EN&amp;sap-nwbc-node=page_collection&amp;sap-nwbc-version_hash=392D742742D08304E969040C8A992A95&amp;sap-theme=zcorbu" id="iFrameId_1550067729776" name="iFrameId_1550067729776" style="display: block; width: 1036px; height: 641px;">Your&#x20;browser&#x20;is&#x20;currently&#x20;configured&#x20;not&#x20;to&#x20;display&#x20;inline&#x20;

<table id="WD027B-r" class="lsTblEdf3Whl lsField--table"> <tbody> <tr> <td class="lsTblEdf3Td urBorderBox" style="vertical-align:top;"><input id="WD027B" ct="CBS" lsdata="{0:'WD027B',5:'FREETEXT',7:'WD027C',14:true,20:40,25:'CLIENT_SERVER_PREFIX',26:'F4LOOKUP',30:true,32:40,34:true,35:'VALUE1'}" class="lsTblEdf3 urBorderBox urEdf2TxtHv" value="" role="combobox" name="WD027B" style="vertical-align:top;"> </td> </tr> </tbody> </table>

</iframe>

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Поскольку элемент находится внутри <iframe> и динамического элемента, вам необходимо:

  • Индуцировать WebDriverWait для требуемого фрейм должен быть доступен и переключиться на него .
  • Индуцировать WebDriverWait для желаемого элемента, который будет активным для клика .
  • Выможно использовать следующее решение:

  • cssSelector:

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[id^='iFrameId_'][src*='FIN_TM_ENTRY_DYNPRO_MSTR']")));
    WebElement Engagement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("table.lsField--table td.urBorderBox>input.urBorderBox[ct='CBS']")));
    
  • xpath:

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[starts-with(@id, 'iFrameId_')][contains(@src, 'FIN_TM_ENTRY_DYNPRO_MSTR')]")));
    WebElement Engagement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//table[contains(@class, 'lsField--table')]//td[contains(@class, 'urBorderBox')]/input[contains(@class, 'urBorderBox') and @ct='CBS']")));
    
0 голосов
/ 13 февраля 2019

Попробуйте этот XPath. Он должен работать.

 WebElement Engagement =driver.findElement(By.xpath("//table[@id='WD027B-r']/tbody/tr/td/input[@id='WD027B']"));
    Engagement.sendKeys("test");

Пожалуйста, дайте мне знать, если это работает для вас.

...