我一直在使用
WebElement strecord = driver.findElement(By.name("Ui_u123));
只能使用“ By.name
”来找到值
字段现在是动态的,但前3个字符始终为“ Ui_u
”
我现在如何找到它,“ By.name
”包含...。?
答案 0 :(得分:0)
您可以尝试以下xpath:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private final String TAG = "mk";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.e(TAG, "MyFirebaseInstanceIDService Token: " + refreshedToken);
}
}
尽管这是 xpath 。我不确定 public class ActivityOne extends AppCompatActivity {
private final String TAG = "mk";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Intent intent = getIntent();
if (intent != null && intent.getExtras() != null) {
Bundle extras = intent.getExtras();
for (String key : extras.keySet()) {
Log.e(TAG, key + " : " + extras.get(key));
}
}
Log.e(TAG, "Token: " + refreshedToken);
//sendNotificationToPatner();
}
private void sendNotificationToPatner() {
Log.e(TAG, "in sendNotificationToPatner: ");
SendNotificationModel sendNotificationModel = new SendNotificationModel("check", "i miss you");
RequestNotificaton requestNotificaton = new RequestNotificaton();
requestNotificaton.setSendNotificationModel(sendNotificationModel);
requestNotificaton.setToken("cJ-y3b3mnYk:APA91bEYTp1LtfpMHp-wdvKkq1_dVYF4DXl1SHWIaw0guwPSoTyFtbcJjPPB6GhP0FuRd9ybJ--BM6W3aFB-2-3KpVOBDITX91QV4kH1lAgxsIxHcfaj5FQLOIZ0t_HDC2bd8hqJrH-F4x_wuunJfYzanAagm4xcaA");
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
retrofit2.Call<ResponseBody> responseBodyCall = apiService.sendChatNotification(requestNotificaton);
responseBodyCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
Log.d(TAG, "in onResponse");
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
Log.d(TAG, "in onFailure");
}
});
}
}
具有 Name 属性。
它可能与多个元素匹配。在这种情况下,您将必须使用//*[starts-with(@name,'Ui_u')]
代码:
starts-with
作为@HellPine答案的补充。您可以将CSS选择器编写为:
findElements()
答案 1 :(得分:0)
为什么不尝试CSS方法[name*='Ui_u']
?
请注意*=
表示包含,您可以对元素上的任何标记使用[]
。
此致
答案 2 :(得分:0)
直接回答,否,您不能将contains
与 By.name
结合使用。
根据Locator Strategies,当您使用driver.findElement(By.name("Ui_u123));
内部的 Java客户端实现时:
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
转换定位器策略:
driver.findElement(By.name("Ui_u123));
收件人:
driver.findElement(By.cssSelector("[name='Ui_u123']));
您可以在Official locator strategies for the webdriver
中找到详细的讨论现在,如果您强行尝试使用关键字contains
,它将按如下所示提高InvalidSelectorException
:
org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression
如果您想实现类似于contains
的方法,则可以使用以下任一解决方案:
^
:表示属性值以
WebElement strecord = driver.findElement(By.cssSelector("[name^='Ui_u']));
$
:表示属性值以结尾(不适用于您的情况,因为该属性以Ui_u
开头)
WebElement strecord = driver.findElement(By.cssSelector("[name$='123']));
*
:表示包含
WebElement strecord = driver.findElement(By.cssSelector("[name*='Ui_u']));
您可以在How to get selectors with dynamic part inside using Selenium with Python?
中找到详细的讨论