Недопустимый HTML-код при использовании RemoteWebDriver и Internet Explorer 11 в среде Windows10 (Selenium/Java)

Я разработал несколько автоматических тестов, которые отлично работают локально, но не работают при использовании RemoteWebDriver, IE11. Страница состоит из IFrames, и это только один из фреймов, где я не могу найти элементы. Остальные рамки работают нормально. Я проверил HTML-код этого конкретного IFrame и обнаружил, что при удаленном запуске HTML-код был недействителен (driver.getPageSource()). Не хватает нескольких близких тегов. Но при локальном запуске HTML правильный. Из-за этого невозможно добраться до элементов. Есть ли у кого-нибудь возможное решение, позволяющее сделать HTML действительным при использовании RemoteWebDriver?

Он отлично работает с хромом (HTML действителен с использованием RemoteWebDriver), но, к сожалению, я застрял в Internet Explorer. :(

Необходимое условие

  1. Windows 10
  2. Версия Selenium-java: 3.141.59
  3. Версия драйвера: IEDriverServer_Win32_3.141.5

Пример: WebDriver (локальный)

<li id="foldheader">Export Collection</li>
<ul id="foldinglist" style="display: none;">
    <li id="foldheader">EXCO Registration</li>
    <ul id="foldinglist" style="display: none;">
        <span>
            <li id="list">
                <a id="listdel" onmouseover="mOVER(this)" onmouseout="mOUT(this)" href="javascript:mCLICK(str);" substr="ID=D1901&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Create Collection&amp;GroupId=X4820">Create Collection</a>
            </li>
        </span>
        <span>
            <li id="list">
                <a id="listdel" onmouseover="mOVER(this)" onmouseout="mOUT(this)" href="javascript:mCLICK(str);" substr="ID=D2336&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Create Collection(Copy Existing)&amp;GroupId=X4820">Create Collection(Copy Existing)</a>
            </li>
        </span>
        <span>
            <li id="list">
                <a id="listdel" onmouseover="mOVER(this)" onmouseout="mOUT(this)" href="javascript:mCLICK(str);" substr="ID=D1929&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Acknowledgement&amp;GroupId=X4820">Acknowledgement</a>
            </li>
        </span>
        <span>
            <li id="list">
                <a id="listdel" onmouseover="mOVER(this)" onmouseout="mOUT(this)" href="javascript:mCLICK(str);" substr="ID=D1886&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Process MT410&amp;GroupId=X4820">Process T410</a>
            </li>
        </span>
        <span>
            <li id="list">
                <a id="listdel" onmouseover="mOVER(this)" onmouseout="mOUT(this)" href="javascript:mCLICK(str);" substr="ID=D3285&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Process Collection from CE&amp;GroupId=X4820">Process Collection from CE</a>
            </li>
        </span>
    </ul>
</ul>

Пример: RemoteWebDriver (отсутствуют закрывающие теги)

<LI id=foldheader>Export Collection
    <UL id=foldinglist style="DISPLAY: none">
        <LI id=foldheader>EXCO Registration
            <UL id=foldinglist style="DISPLAY: none">
                <SPAN>
                    <LI id=list>
                        <A onmouseover=mOVER(this) onmouseout=mOUT(this) id=listdel href="javascript:mCLICK(str);" substr="ID=F05030701901&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Create Collection&amp;GroupId=G49082300552">Create Collection</A>
                    </SPAN>
                    <SPAN>
                        <LI id=list>
                            <A onmouseover=mOVER(this) onmouseout=mOUT(this) id=listdel href="javascript:mCLICK(str);" substr="ID=F05030702336&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Create Collection(Copy Existing)&amp;GroupId=G49082300552">Create Collection(Copy Existing)</A>
                        </SPAN>
                        <SPAN>
                            <LI id=list>
                                <A onmouseover=mOVER(this) onmouseout=mOUT(this) id=listdel href="javascript:mCLICK(str);" substr="ID=F05030701929&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Acknowledgement&amp;GroupId=G49082300552">Acknowledgement</A>
                            </SPAN>
                            <SPAN>
                                <LI id=list>
                                    <A onmouseover=mOVER(this) onmouseout=mOUT(this) id=listdel href="javascript:mCLICK(str);" substr="ID=F05030701886&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Process MT410&amp;GroupId=G49082300552">Process MT410</A>
                                </SPAN>
                                <SPAN>
                                    <LI id=list>
                                        <A onmouseover=mOVER(this) onmouseout=mOUT(this) id=listdel href="javascript:mCLICK(str);" substr="ID=F05030703285&amp;Module=Export Collection&amp;Group=EXCORegistration&amp;Function=Process Collection from CE&amp;GroupId=G49082300552">Process Collection from CE</A>
                                    </SPAN>
                                </LI>
                            </UL>
                        </UL>

Тестовый фрагмент исходного кода

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.net.URL;
import java.sql.Driver;

public class IETest {
    private static void internetExplorerTest() {
        //WebDriver driver;
        RemoteWebDriver driver;
        URL url =null;
        try{
            url = new URL("<remote url>");
        } catch(Exception e) {

        }

        //Setting the webdriver.chrome.driver property to its executable's location
        System.setProperty("webdriver.ie.driver", "C:\\IEDriverServer_Win32_3.141.5\\IEDriverServer.exe");

        InternetExplorerOptions ieOptions = new InternetExplorerOptions();
        ieOptions.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
        ieOptions.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);

        //driver = new InternetExplorerDriver(ieOptions);
        driver = new RemoteWebDriver(url, ieOptions);

        driver.get("<url>");

        WebDriverWait wait = new WebDriverWait(driver,10);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("FunctionList")));
        driver.switchTo().frame("FunctionList");

        // Check HTML in frame (Returns invalid HTML when using RemoteWebDriver. Missing close-tags)
        System.out.println(driver.getPageSource());

        wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[text()='Export Collection']"))).click();

        driver.quit();
    }

    public static void main (String[] args) {
        internetExplorerTest();
    }
}

К сожалению, я не могу предоставить вам весь HTML-код из IFrame из соображений безопасности. Но шаблон похож на приведенный выше HTML-код RemoteWebDriver. Отсутствуют li-close-теги.


person JensW    schedule 10.06.2020    source источник
comment
Похоже, вы опубликовали вывод, который вы получили в локальном IE, и вывод, который вы получили в удаленном веб-драйвере. Я предлагаю вам опубликовать свой код селена и код HTML из этого Iframe. Это может помочь нам провести тест с ним и проверить наличие проблемы.   -  person Deepak-MSFT    schedule 10.06.2020
comment
@Deepak-MSFT Спасибо за ваш ответ. Я добавил тестовый код, но, к сожалению, не могу загрузить весь HTML из соображений безопасности.   -  person JensW    schedule 10.06.2020


Ответы (1)


Мы видим, что вы печатаете вывод в консоли.

Вы получаете вывод, но он неполный.

Возможно, исходный код большой, но размер буфера консоли меньше. По этой причине может возникнуть эта проблема.

Если вы используете Eclipse, вы можете выполнить приведенные ниже шаги, чтобы увеличить размер буфера консоли.

  1. Перейдите в «Окно» > «Настройки» > «Выполнить/Отладка» > «Консоль».
  2. Увеличьте размер буфера консоли
  3. ИЛИ просто снимите флажок «Ограничить вывод консоли» вместе

введите здесь описание изображения

Другой обходной путь — записать данные в файл.

File file = new File("path/filename.txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();

Ссылка:

Java selenium getPageSource не работает

Вы можете попробовать проверить это на своей стороне и сообщить нам, работает ли это для вас или нет.

person Deepak-MSFT    schedule 11.06.2020
comment
Я действительно делал это раньше. К сожалению, с тем же результатом. - person JensW; 11.06.2020
comment
Вы пробовали сохранить исходник в файл? Какой результат вы получили с этим тестом? - person Deepak-MSFT; 11.06.2020
comment
Я получил тот же результат. В источнике отсутствовали конечные теги при выполнении RemoteWebdriver. Но при локальном выполнении (WebDriver) HTML был действителен без отсутствующих конечных тегов. - person JensW; 15.06.2020
comment
Вы пытаетесь получить доступ к одной и той же веб-странице локально и с помощью удаленного веб-драйвера? Если это общедоступная страница, вы можете попробовать поделиться ссылкой здесь. Мы можем попробовать протестировать его с помощью удаленного веб-драйвера, чтобы проверить результаты. - person Deepak-MSFT; 15.06.2020