Я разработал несколько автоматических тестов, которые отлично работают локально, но не работают при использовании RemoteWebDriver, IE11. Страница состоит из IFrames, и это только один из фреймов, где я не могу найти элементы. Остальные рамки работают нормально. Я проверил HTML-код этого конкретного IFrame и обнаружил, что при удаленном запуске HTML-код был недействителен (driver.getPageSource()). Не хватает нескольких близких тегов. Но при локальном запуске HTML правильный. Из-за этого невозможно добраться до элементов. Есть ли у кого-нибудь возможное решение, позволяющее сделать HTML действительным при использовании RemoteWebDriver?
Он отлично работает с хромом (HTML действителен с использованием RemoteWebDriver), но, к сожалению, я застрял в Internet Explorer. :(
Необходимое условие
- Windows 10
- Версия Selenium-java: 3.141.59
- Версия драйвера: 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&Module=Export Collection&Group=EXCORegistration&Function=Create Collection&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&Module=Export Collection&Group=EXCORegistration&Function=Create Collection(Copy Existing)&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&Module=Export Collection&Group=EXCORegistration&Function=Acknowledgement&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&Module=Export Collection&Group=EXCORegistration&Function=Process MT410&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&Module=Export Collection&Group=EXCORegistration&Function=Process Collection from CE&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&Module=Export Collection&Group=EXCORegistration&Function=Create Collection&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&Module=Export Collection&Group=EXCORegistration&Function=Create Collection(Copy Existing)&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&Module=Export Collection&Group=EXCORegistration&Function=Acknowledgement&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&Module=Export Collection&Group=EXCORegistration&Function=Process MT410&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&Module=Export Collection&Group=EXCORegistration&Function=Process Collection from CE&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-теги.